package com.cruise.game.mapper;

import com.cruise.game.model.entity.GameService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 游戏服务Mapper接口
 * 
 * @author cruise
 * @date 2025-02-28
 */
@Repository
public interface GameServiceMapper extends BaseMapper<GameService> {

    /**
     * 通过分类ID查询游戏服务列表
     *
     * @param categoryId 分类ID
     * @return 游戏服务列表
     */
    List<GameService> selectByCategoryId(@Param("categoryId") Long categoryId);

    /**
     * 通过代理ID查询游戏服务列表
     *
     * @param agentId 代理ID
     * @return 游戏服务列表
     */
    List<GameService> selectByAgentId(@Param("agentId") Long agentId);

    /**
     * 查询热门游戏服务列表
     *
     * @param limit 限制数量
     * @return 热门游戏服务列表
     */
    List<GameService> selectHotList(@Param("limit") Integer limit);

    /**
     * 查询推荐游戏服务列表
     *
     * @param limit 限制数量
     * @return 推荐游戏服务列表
     */
    List<GameService> selectRecommendedList(@Param("limit") Integer limit);

    /**
     * 搜索游戏服务列表
     *
     * @param keyword 关键词
     * @return 游戏服务列表
     */
    List<GameService> searchByKeyword(@Param("keyword") String keyword);

    /**
     * 更新游戏服务状态
     *
     * @param id 游戏服务ID
     * @param status 状态
     * @return 影响的行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") String status);

    /**
     * 更新游戏服务是否热门
     *
     * @param id 游戏服务ID
     * @param isHot 是否热门
     * @return 影响的行数
     */
    int updateIsHot(@Param("id") Long id, @Param("isHot") Integer isHot);

    /**
     * 更新游戏服务是否推荐
     *
     * @param id 游戏服务ID
     * @param isRecommended 是否推荐
     * @return 影响的行数
     */
    int updateIsRecommended(@Param("id") Long id, @Param("isRecommended") Integer isRecommended);

    /**
     * 统计分类下的服务数量
     *
     * @param categoryId 分类ID
     * @return 服务数量
     */
    int countByCategoryId(@Param("categoryId") Long categoryId);

    /**
     * 统计代理的服务数量
     *
     * @param agentId 代理ID
     * @return 服务数量
     */
    int countByAgentId(@Param("agentId") Long agentId);
}
